/**    
 * @FileName: BaseFragment.java  
 * @Package:com.easypass.dsa.fragment  
 * @Description: TODO 
 * @author: lida   Email:lida@bitauto.com
 * @date:2013-9-25 上午9:43:59  
 * @version V1.0    
 */
package com.wang.ioc;

import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;

import android.app.Dialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.view.View;
import android.view.View.OnClickListener;

import com.wang.ioc.annotation.AnnotationManager;
import com.wang.ioc.annotation.ViewContainer;

@ViewContainer(useIoc=true,useDelayModel=true,useInitingDialog=true)
public abstract class BaseV4Fragment extends Fragment implements OnClickListener {
	private Dialog initingDialog;
	
	Handler _handler=new Handler(){
		@Override
		public void handleMessage(Message msg) {
			switch(msg.what){
			case IocManager.MESSAGE_TYPE_SETDATA:
				setData();
				break;
			}
		}
	};
	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        boolean useIoc=false;
		boolean useDelayModel=true;
		boolean useInitingDialog=true;
		long delayTime=0;
		try {
			Map<String,Object> map=AnnotationManager.loadViewContainerAnnotationValue(this);
			if(map.containsKey("useIoc")){
				useIoc=(Boolean) map.get("useIoc");
			}
			if(map.containsKey("useDelayModel")){
				useDelayModel=(Boolean) map.get("useDelayModel");
			}
			if(map.containsKey("useInitingDialog")){
				useInitingDialog=(Boolean) map.get("useInitingDialog");
			}
			if(map.containsKey("delayTime")){
				delayTime=(Long) map.get("delayTime");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//是否使用IOC
		if(!useIoc){
			return;
		}
		//是否在初始化时使用dialog
		if(initingDialog!=null){
			initingDialog.dismiss();
		}
		if(useInitingDialog){
			initingDialog=createInitingDialog();
			if(initingDialog!=null){
				initingDialog.show();
			}
		}
    	IocManager.getInstance(getActivity()).autowireView(getActivity(), this,getView(), this);
		if(useDelayModel){
			new Timer().schedule(new TimerTask() {
				
				@Override
				public void run() {
					_handler.sendEmptyMessage(IocManager.MESSAGE_TYPE_SETDATA);
					
				}
			},delayTime);
		}else{
			setData();
		}
	}
	/**
	 * 设置数据。
	 * 如果开启了初始化时使用dialog，那么在子类覆盖此方法时，需要在最后调用super.setData()，以关闭dialog。
	 */
	public void setData(){
		closeInitingDialog();
	}
	/**
	 * 关闭初始化dialog。
	 */
	public void closeInitingDialog(){
		if(initingDialog!=null){
			initingDialog.dismiss();
		}
	}
	@Override
	public void onClick(View v) {
		
	}
	/**
	 * 创建初始化时dialog。
	 * @return
	 */
	protected Dialog createInitingDialog(){
        return IocManager.createInitingDialog(getActivity());
	}
	/**
	 * 显示初始化dialog。
	 */
	public void showInitingDialog(){
		if(initingDialog==null){
			initingDialog=createInitingDialog();
		}
		if(initingDialog!=null){
			initingDialog.show();
		}
	}
}
